<?php 
/**
 * This file is part of DomFg.
 * 
 * DomFg is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * DomFg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with DomFg.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * @link http://inditel.ee/
 * @copyright 2007-2009 Inditel Meedia OÜ
 * @author Oliver Leisalu <oliver@inditel.ee>
 */

/**
* @author Oliver Leisalu, Inditel Meedia
* @package DomFg
* @subpackage DataSource
*/
class DomFgDataSource {

	protected $source;
	
	protected $perPage;
	
	protected $orderBy;
	
	protected $searchKeys;
	
	public function __construct( array $source, $perPage = 50 ) {
		$this->source( $source );
		$this->perPage( $perPage );
	}
	
	public function source( array $value ) {
		$this->source = $value;
	}
	
	public function perPage( $value ) {
		$this->perPage = (int)$value;
	}
	
	public function orderBy( $key, $direction = 'ASC' ) {
		throw new RuntimeException('Not yet implemented for DomFgDataSource');
	}
	
	public function searchKeys( array $keys ) {
		$this->searchKeys = $keys;
	}
	
	public function where( $value ) {
		if( !$value )
			return;
			
		if( empty($this->searchKeys) === true )
			throw new  RuntimeException('Can\'t set where, there are no searchKeys specified!');
			
		$newSource = array();
		foreach( $this->source as &$dat ) {
			foreach($this->searchKeys as $key ) {
				if( strstr( $dat[$key], $value) )
					$newSource[] = $dat;
			}
		}
		$this->source = $newSource;
	}
	
	public function getTotal() {
		return count($this->source);
	}
	
	public function getData( $start ) {
		if( $this->perPage <= 0 )
			return $this->source;
		else
			return array_slice($this->source, $start, $this->perPage );
	}
	
	public function __get( $var ) {
		return $this->$var;
	}

}
?>